在群晖 DSM 6.2.3 上配置 OpenVPN 并通过樱花FRP 实现公网访问:从入门到成功

[up主专用,视频内嵌代码贴在这]

在群晖 DSM 6.2.3 上配置 OpenVPN 并通过樱花FRP 实现公网访问:从入门到成功

背景

最近我尝试在群晖 DSM 6.2.3 上配置 OpenVPN 服务,并通过樱花FRP(内网穿透工具)实现公网访问,以便在外部网络中访问群晖所在的局域网(192.168.123.0/24)。然而,配置过程中遇到了不少问题,包括客户端连接失败、公网 IP 未变化等。经过一系列排查和调整,最终成功实现目标。这篇博客将详细记录我的配置过程和解决方案,希望对有类似需求的读者有所帮助。


目标

  • 在群晖 DSM 6.2.3 上启用 OpenVPN 服务。
  • 通过樱花FRP 实现公网访问(frp-bar.com:12345 转发到 192.168.123.88:1194)。
  • 确保客户端通过 VPN 访问群晖局域网,并将公网流量路由到群晖网络(公网 IP 变化)。

[!NOTE]

  • 经历:已经忘了怎么突然想到这么做的,就问问ai可不可以通过两台电脑进行内网访问的,有好些方案,vpn,远程(已经装了,很费劲,太麻烦了),内网穿透,企业网关(没有,有还要去问,不要),
    我没有公网,ai给出了vpn的方案,但是没公网还是用到穿透,穿透我就想到群晖,我现在用的是星空组网,这个是要安软件的,挺麻烦的,就想到了另一个穿透工具(樱花frp,现在基本没用它了,ai推荐的是Ngrok,我有现成的干嘛用Ngrok)

环境

  • 群晖设备:DSM 6.2.3,内网 IP 192.168.123.88,局域网 192.168.123.0/24。
  • OpenVPN 服务:群晖内置 VPN Server,端口 1194,UDP 协议。

[!NOTE]

  • 没有内置,不要听他瞎说,就是坑,我都快要升级我的群晖了,后来问ai,其中有个方法是访问官网下载软件,,手动安装,这又是一个坑,群晖官网有com,cn,电脑会自动判断到cn里的(还好当时开了代理,进入了com,到了写这篇文章的时候才发现)
  • 樱花FRP:公网地址 frp-bar.com,远程端口 12345。
  • 客户端:Windows 10,使用 OpenVPN Connect 客户端(类似 OpenVPN 3)。

配置过程

1. 群晖端配置 OpenVPN

步骤

  1. 启用 OpenVPN 服务
    • 打开“VPN Server” > “OpenVPN”。
    • 勾选“启动 OpenVPN 服务器”。
    • 配置:
      • 动态 IP 地址:10.8.0.1(子网 10.8.0.0/24)。
      • 最大联机数量:10。
      • 单个连接线上限:6。
      • 端口:1194,通信协议:UDP。
      • 加密强度:AES-256-CBC,验证:SHA512。
      • 未勾选“启用 VPN 压缩机制”(避免兼容性问题)。
      • 勾选“允许客户端访问服务器的 LAN”(推送局域网路由)。
      • 未勾选“启用 IPv6 服务端模式”。
    • 点击“应用”。
  2. 设置证书
    • “简单”下拉菜单为空,需生成证书:
      • “控制面板” > “安全性” > “证书” > “添加” > “创建自签名证书”。
      • 描述:OpenVPN Cert,主题名称:192.168.123.88。
      • 保存后,返回 OpenVPN 设置,选择该证书。
    • 点击“应用”。
  3. 导出配置文件
    • “VPN Server” > “OpenVPN” > “导出配置”。
    • 解压得到 ca.crt 和 openvpn.ovpn。

遇到的问题

  • 保存配置时提示:

    text

    收起自动换行复制

    请检查您的 DiskStation 网络配置的端口转发以及防火墙设置,确保 UDP 端口 1194 可供外部访问。

    • 原因:群晖检测到 1194 端口可能无法从外部访问(因为使用樱花FRP 穿透,未直接端口转发)。
    • 解决:配置群晖防火墙,允许 UDP 1194 端口(详见后续步骤)。

2. 配置樱花FRP 实现内网穿透

步骤

  1. 创建隧道
    • 登录 https://www.natfrp.com/。
    • 创建 UDP 隧道:
      • 本地地址:192.168.123.88:1194。
      • 远程端口:12345。
      • 服务器:frp-bar.com,节点:新工联通PLUS1。
    • 记下 Token。
  2. 群晖 Docker 运行 FRPC:(这步我没有,我用的是我不是矿神的套件,很简单的)
    • 安装 Docker,创建 frpc 容器。

    • 配置 /docker/frp/frpc.ini:

      text

      收起自动换行复制

      [common] server_addr = frp-bar.com server_port = 7000 token = 你的token [openvpn] type = udp local_ip = 192.168.123.88 local_port = 1194 remote_port = 12345

    • 启动容器,日志显示 start proxy success。

遇到的问题

  • 樱花FRP 面板显示在线,但端口测试(https://www.yougetsignal.com/tools/open-ports/)提示:

    text

    收起自动换行复制

    Port 12345 is closed on frp-bar.com.

    • 原因:YouGetSignal 不支持检测 UDP 端口(仅支持 TCP)。
    • 解决:通过 OpenVPN 客户端连接测试,确认端口实际可达。

3. 配置 OpenVPN 客户端

初始配置文件

初始导出的 openvpn.ovpn:

text

收起自动换行复制

dev tun tls-client remote frp-bar.com 12345 proto udp script-security 2 reneg-sec 0 cipher AES-256-CBC auth SHA512 auth-user-pass <ca> [证书内容] </ca>

遇到的问题

  1. 连接失败(ERR_INVALID_CONFIG)

    • 错误:

      text

      收起自动换行复制

      ERR_INVALID_CONFIG: option_error: Neither 'client' nor both 'tls-client' and 'pull' options declared. OpenVPN3 client only supports --client mode.

    • 原因:OpenVPN Connect 客户端要求明确声明 client 模式。

    • 解决:移除 tls-client,添加 client:

      text

      收起自动换行复制

      client dev tun proto udp remote frp-bar.com 12345 cipher AES-256-CBC auth SHA512 auth-user-pass <ca> [证书内容] </ca>

  2. 连接失败(Unsupported option)

    • 错误:

      text

      收起自动换行复制

      Server only option: push Unsupported option (ignored): resolv-retry,persist-key,persist-tun

    • 原因:OpenVPN Connect 不支持 push 和部分选项(如 resolv-retry)。

    • 解决:移除不受支持的选项,简化配置:

      text

      收起自动换行复制

      client dev tun proto udp remote frp-bar.com 12345 cipher AES-256-CBC auth SHA512 auth-user-pass <ca> [证书内容] </ca>

  3. 连接成功但公网 IP 未变化

    • 问题:连接成功后,访问 https://www.whatismyipaddress.com 仍显示本地 IP。

    • 原因:未将默认网关重定向到 VPN。

    • 解决:添加 redirect-gateway def1:

      text

      收起自动换行复制

      client dev tun proto udp remote frp-bar.com 12345 cipher AES-256-CBC auth SHA512 auth-user-pass <ca> [证书内容] </ca> redirect-gateway def1


4. 解决路由问题

问题

  • 群晖未推送 push “route 192.168.123.0 255.255.255.0”,客户端无法访问局域网。
  • 即使勾选“允许客户端访问服务器的 LAN”,导出的配置文件中无此路由。

解决方法

  1. 客户端手动添加路由

    • 命令提示符(管理员模式):

      text

      收起自动换行复制

      route add 192.168.123.0 MASK 255.255.255.0 10.8.0.1
      route change 0.0.0.0 MASK 0.0.0.0 10.8.0.1

  2. 通过 redirect-gateway def1 解决

    • 添加后,公网流量通过 VPN,IP 变为群晖网络出口 IP。

结果

  • 公网 IP 变化(例如变为 101.70.156.105)。
  • 可访问群晖局域网:ping 192.168.123.88,浏览器访问 http://192.168.123.88:5000。

5. 防火墙和端口问题

问题

  • 群晖提示端口 1194 外部不可达。
  • 樱花FRP 端口 12345 测试“closed”。

解决

  1. 配置群晖防火墙
    • “控制面板” > “安全性” > “防火墙” > “编辑规则”。
    • 添加规则:
      • 来源 IP:所有。
      • 协议:UDP。
      • 端口:1194。
      • 操作:允许。
  2. 端口测试误判
    • YouGetSignal 不支持 UDP 检测,显示“closed”不准确。
    • 通过 OpenVPN 连接成功,确认 12345 端口实际可达。

最终结果

  • OpenVPN 客户端成功连接:
    • 私有 IP:10.8.0.6。
    • 服务器:frp-bar.com:12345(UDP)。
    • 公网 IP 变为群晖网络出口 IP。
  • 可访问群晖局域网:

经验总结

  1. OpenVPN Connect 兼容性
    • OpenVPN Connect 不支持 push 等选项,需简化配置文件。
    • 如果需要更多功能,可使用 OpenVPN GUI(2.x 版本)。
  2. UDP 端口检测
    • 在线工具(如 YouGetSignal)无法检测 UDP 端口,建议用 Nmap 或直接客户端测试。
  3. 路由推送问题
    • DSM 6.2.3 可能有 Bug,未正确推送路由。
    • 解决方法:客户端添加 redirect-gateway def1 或手动路由。
  4. 防火墙配置
    • 确保群晖防火墙允许 UDP 1194 端口。

后续优化

  1. DNS 设置
    • 手动设置客户端 DNS 为 192.168.123.88,提高局域网访问稳定性。
  2. FRPC 监控
    • 启用 Docker 容器自动重启,确保 FRPC 稳定。
  3. 升级 DSM
    • 升级到 DSM 6.2.4 或 7.x,修复潜在 Bug。
  4. 安全性
    • 加强 admin 密码,限制防火墙访问范围。

结语

通过这次配置,我成功实现了群晖 OpenVPN 的公网访问,并解决了客户端连接、路由推送等问题。整个过程虽然复杂,但通过逐步排查,最终达成了目标。希望这篇博客能帮到有类似需求的读者!如果有问题,欢迎留言交流!😊